package com.mall.utils;

import com.alibaba.fastjson.JSON;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

//Redis操作的工具类
public class RedisUtil {
    /***
     * 将一个元素加入hash集合中
     * @param key
     * @param field
     * @param value
     * @return
     */
    public static void insertKeyToHash(StringRedisTemplate stringRedisTemplate,String key,String field,String value){
        stringRedisTemplate.opsForHash().put(key,field,value);
    }

    /***
     * 将一个map集合加入到redis中
     * @param key
     * @param map
     */
    public static void insertMapToHash(StringRedisTemplate stringRedisTemplate,String key,Map<String,String> map){
        stringRedisTemplate.opsForHash().putAll(key,map);
    }

    /***
     * 从hash中读取一个元素
     * @param key
     * @param field
     * @return
     */
    public static Object getKeyFromHash(StringRedisTemplate stringRedisTemplate,String key,String field){
        return stringRedisTemplate.opsForHash().get(key,field);
    }

    /***
     * 从hash中用户读取购物车信息
     * @param key
     * @return
     */
    public static Map<String, String> getMapFromHash(StringRedisTemplate stringRedisTemplate,String key) {
        return stringRedisTemplate.execute((RedisCallback<Map<String, String>>) con -> {
            Map<byte[], byte[]> result = con.hGetAll(key.getBytes());
            if (CollectionUtils.isEmpty(result)) {
                return new HashMap<>(0);
            }

            Map<String, String> ans = new HashMap<>(result.size());
            for (Map.Entry<byte[], byte[]> entry : result.entrySet()) {
                ans.put(new String(entry.getKey()), new String(entry.getValue()));
            }
            return ans;
        });
    }


    /***
     * 从hash中删除一个field
     * @param stringRedisTemplate
     * @param key
     * @param field
     */
    public static void deleteProduct(StringRedisTemplate stringRedisTemplate,String key,String field){
//        //首先从map中读取该用户的购物车信息
//        Map<String, String> cartMap = RedisUtil.getMapFromHash(stringRedisTemplate, key);
//        System.out.println(cartMap);
//        //遍历集合删除元素
//        cartMap.remove(field);
//        System.out.println(field);
//        System.out.println(cartMap);
//        //将新的集合重新插入进去
//        RedisUtil.insertMapToHash(stringRedisTemplate,key,cartMap);

        stringRedisTemplate.opsForHash().delete(key,field);
    }
}
